home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / XSDLWriter.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  12.4 KB  |  412 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.Debug;
  4. import com.extensibility.xml.dt.DataType;
  5. import com.extensibility.xml.dt.DataTypeIntf;
  6. import com.extensibility.xml.dt.Facet;
  7. import java.util.Enumeration;
  8. import java.util.Vector;
  9.  
  10. public class XSDLWriter extends SchemaWriter implements XSDLTags {
  11.    ElemProxy elemProxy = new ElemProxy(this);
  12.    AttrProxy attrProxy = new AttrProxy(this);
  13.    DTProxy dtProxy = new DTProxy(this);
  14.    IPEProxy ipeProxy = new IPEProxy(this);
  15.    NotationProxy notationProxy = new NotationProxy(this);
  16.  
  17.    public XSDLWriter(SchemaIntf var1) {
  18.       super(var1, var1.getURI());
  19.    }
  20.  
  21.    public XSDLWriter(SchemaIntf var1, URI var2) {
  22.       super(var1, var2);
  23.    }
  24.  
  25.    private void writeNameRef(SXE var1, BaseDeclaration var2) {
  26.       Debug.assert(var2 != null, "trying to write a name ref to a decl whose owner is not a basedecl");
  27.       var1.writeAttr("ref", var2.getName());
  28.    }
  29.  
  30.    private void writeElemNameRef(SXE var1, String var2, String var3) {
  31.       ElementDeclaration var4 = super.schema.getNamedElement(var2);
  32.       if (var4 != null) {
  33.          this.writeNameRef(var1, var4);
  34.          if (var3 != null) {
  35.             var1.writeAttr("name", var3);
  36.          }
  37.       } else {
  38.          var1.writeAttr("name", var2);
  39.       }
  40.  
  41.    }
  42.  
  43.    private void writeDatatypeNameRef(SXE var1, BaseDeclaration var2, DataType var3) {
  44.       if (var3 == null) {
  45.          var1.writeAttr("type", "string");
  46.       } else {
  47.          Object var4 = null;
  48.          String var5 = super.schema.getDataTypeSource(var3);
  49.          var1.writeAttr("type", var5);
  50.       }
  51.    }
  52.  
  53.    private void writeXSDComments(SXE var1, Enumeration var2) {
  54.       if (var2 != null) {
  55.          if (var2.hasMoreElements()) {
  56.             var1.writeElem("annotation", -1);
  57.  
  58.             while(var2.hasMoreElements()) {
  59.                Comment var3 = (Comment)var2.nextElement();
  60.                if (var3.getKind() != null && var3.getKind().equals("USAGE")) {
  61.                   var1.writeElem("documentation", -1);
  62.                   var1.writeText(var3.getComment(true));
  63.                   var1.flush("documentation");
  64.                } else {
  65.                   var1.writeElem("appInfo", -1);
  66.                   var1.writeText(var3.getComment(true));
  67.                   var1.flush("appInfo");
  68.                }
  69.             }
  70.  
  71.             var1.flush("annotation");
  72.          }
  73.       }
  74.    }
  75.  
  76.    void writeOccurance(SXE var1, ContentModelTerm var2) {
  77.       if (var2.getOccurance() == '?') {
  78.          var1.writeAttr("minOccurs", "0");
  79.          var1.writeAttr("maxOccurs", "1");
  80.       } else if (var2.getOccurance() != 0) {
  81.          if (var2.getOccurance() == '+') {
  82.             var1.writeAttr("minOccurs", "1");
  83.             var1.writeAttr("maxOccurs", "unbounded");
  84.          } else if (var2.getOccurance() == '*') {
  85.             var1.writeAttr("minOccurs", "0");
  86.             var1.writeAttr("maxOccurs", "unbounded");
  87.          }
  88.       }
  89.  
  90.    }
  91.  
  92.    void writeModel(SXE var1, ContentModelTerm var2, boolean var3) {
  93.       if (var2 instanceof ContentModel && var2.getOwner() instanceof ElementDeclaration) {
  94.          ContentModelTermEnum var7 = var2.getTerms(false);
  95.  
  96.          while(var7.hasMoreElements()) {
  97.             ContentModelTerm var8 = (ContentModelTerm)var7.nextElement();
  98.             this.writeModel(var1, var8, false);
  99.          }
  100.       } else if (!var3 && var2.isOwned() && var2.getOwner() instanceof InternalPEDeclaration) {
  101.          var1.writeElem("group", true);
  102.          this.writeNameRef(var1, var2.getOwner().asDecl());
  103.       } else if (var2.isGroup()) {
  104.          String var4 = var2.getChildConnection() == ',' ? "sequence" : "choice";
  105.          var1.writeElem(var4, -1);
  106.          this.writeOccurance(var1, var2);
  107.          ContentModelTermEnum var5 = var2.getTerms(false);
  108.  
  109.          while(var5.hasMoreElements()) {
  110.             ContentModelTerm var6 = (ContentModelTerm)var5.nextElement();
  111.             this.writeModel(var1, var6, false);
  112.          }
  113.  
  114.          var1.flush(var4);
  115.       } else {
  116.          var1.writeElem("element", true);
  117.          this.writeElemNameRef(var1, var2.getTerm(), var2.getLocalTag());
  118.          this.writeOccurance(var1, var2);
  119.       }
  120.  
  121.    }
  122.  
  123.    public void writeAttrGroup(SXE var1, Enumeration var2, AttrProxy var3, boolean var4) {
  124.       while(var2.hasMoreElements()) {
  125.          AttributeGroupMember var5 = (AttributeGroupMember)var2.nextElement();
  126.          if (var5 instanceof AttributeDeclaration) {
  127.             var3.setDecl((AttributeDeclaration)var5);
  128.             var3.writeType(var1, var4);
  129.          } else if (var5 instanceof AttributeGroup) {
  130.             var1.writeElem("attributeGroup", true);
  131.             this.writeNameRef(var1, var5.getOwner().asDecl());
  132.          } else {
  133.             Debug.assert(false, "unknown member type");
  134.          }
  135.       }
  136.  
  137.    }
  138.  
  139.    private static void writeEnumeration(SXE var0, BaseDeclaration var1) {
  140.       Object var2 = null;
  141.       Object var3 = null;
  142.       Object var4 = null;
  143.       Enumeration var9;
  144.       if (var1 instanceof DataTypeDeclaration) {
  145.          DataType var7 = ((DataTypeDeclaration)var1).getDataType();
  146.          Facet var5 = var7.getFacet(Facet.FACET_ENUM_NAME);
  147.          Vector var6 = (Vector)var5.getValue();
  148.          var9 = var6.elements();
  149.       } else {
  150.          if (!(var1 instanceof AttributeDeclaration)) {
  151.             return;
  152.          }
  153.  
  154.          DataType var8 = ((AttributeDeclaration)var1).getDataType();
  155.          var9 = ((AttributeDeclaration)var1).getChoices(var1.getSchema(), true);
  156.       }
  157.  
  158.       while(var9.hasMoreElements()) {
  159.          String var10 = (String)var9.nextElement();
  160.          var0.writeElem("enumeration", -1);
  161.          var0.writeAttr("value", var10);
  162.          var0.flush("enumeration");
  163.       }
  164.  
  165.       var0.flush("enumeration");
  166.    }
  167.  
  168.    public static void writeDataTypeFacets(SXE var0, BaseDeclaration var1, DataTypeIntf var2) {
  169.       if (var2.hasFacet(Facet.FACET_ENUM_NAME)) {
  170.          writeEnumeration(var0, var1);
  171.       } else {
  172.          String var3 = "value";
  173.          if (var2.hasFacet(Facet.FACET_MIN_NAME)) {
  174.             String var5;
  175.             if (var2.hasFacet(Facet.FACET_MINEX_NAME)) {
  176.                Facet var4 = var2.getFacet(Facet.FACET_MINEX_NAME);
  177.                if (((String)var4.getValue()).equals("true")) {
  178.                   var5 = "minExclusive";
  179.                } else {
  180.                   var5 = "minInclusive";
  181.                }
  182.             } else {
  183.                var5 = "minInclusive";
  184.             }
  185.  
  186.             var0.writeElem(var5, -1);
  187.             Facet var6 = var2.getFacet(Facet.FACET_MIN_NAME);
  188.             var0.writeAttr(var3, (String)var6.getValue());
  189.             var0.flush(var5);
  190.          }
  191.  
  192.          if (var2.hasFacet(Facet.FACET_MAX_NAME)) {
  193.             Object var17 = null;
  194.             String var18;
  195.             if (var2.hasFacet(Facet.FACET_MAXEX_NAME)) {
  196.                Facet var7 = var2.getFacet(Facet.FACET_MAXEX_NAME);
  197.                if (((String)var7.getValue()).equals("true")) {
  198.                   var18 = "maxExclusive";
  199.                } else {
  200.                   var18 = "maxInclusive";
  201.                }
  202.             } else {
  203.                var18 = "maxInclusive";
  204.             }
  205.  
  206.             var0.writeElem(var18, -1);
  207.             Facet var8 = var2.getFacet(Facet.FACET_MAX_NAME);
  208.             var0.writeAttr(var3, (String)var8.getValue());
  209.             var0.flush(var18);
  210.          }
  211.  
  212.          if (var2.hasFacet(Facet.FACET_MAXLENGTH_NAME)) {
  213.             var0.writeElem("maxLength", -1);
  214.             Facet var9 = var2.getFacet(Facet.FACET_MAXLENGTH_NAME);
  215.             var0.writeAttr(var3, (String)var9.getValue());
  216.             var0.flush("maxLength");
  217.          }
  218.  
  219.          if (var2.hasFacet(Facet.FACET_DIGITS_NAME)) {
  220.             var0.writeElem("precision", -1);
  221.             Facet var10 = var2.getFacet(Facet.FACET_DIGITS_NAME);
  222.             var0.writeAttr(var3, (String)var10.getValue());
  223.             var0.flush("precision");
  224.          }
  225.  
  226.          if (var2.hasFacet(Facet.FACET_DECIMALS_NAME)) {
  227.             var0.writeElem("scale", -1);
  228.             Facet var11 = var2.getFacet(Facet.FACET_DECIMALS_NAME);
  229.             var0.writeAttr(var3, (String)var11.getValue());
  230.             var0.flush("scale");
  231.          }
  232.  
  233.          if (var2.hasFacet(Facet.FACET_LENGTH_NAME)) {
  234.             var0.writeElem("length", -1);
  235.             Facet var12 = var2.getFacet(Facet.FACET_LENGTH_NAME);
  236.             var0.writeAttr(var3, (String)var12.getValue());
  237.             var0.flush("length");
  238.          }
  239.  
  240.          if (var2.hasFacet(Facet.FACET_MINLENGTH_NAME)) {
  241.             var0.writeElem("minLength", -1);
  242.             Facet var13 = var2.getFacet(Facet.FACET_MINLENGTH_NAME);
  243.             var0.writeAttr(var3, (String)var13.getValue());
  244.             var0.flush("minLength");
  245.          }
  246.  
  247.          if (var2.hasFacet(Facet.FACET_ENCODING_NAME)) {
  248.             var0.writeElem("encoding", -1);
  249.             Facet var14 = var2.getFacet(Facet.FACET_ENCODING_NAME);
  250.             var0.writeAttr(var3, (String)var14.getValue());
  251.             var0.flush("encoding");
  252.          }
  253.  
  254.          if (var2.hasFacet(Facet.FACET_PATTERN_NAME)) {
  255.             var0.writeElem("pattern", -1);
  256.             Facet var15 = var2.getFacet(Facet.FACET_PATTERN_NAME);
  257.             var0.writeAttr(var3, (String)var15.getValue());
  258.             var0.flush("pattern");
  259.          }
  260.  
  261.          if (var2.hasFacet(Facet.FACET_PERIOD_NAME)) {
  262.             var0.writeElem("period", -1);
  263.             Facet var16 = var2.getFacet(Facet.FACET_PERIOD_NAME);
  264.             var0.writeAttr(var3, (String)var16.getValue());
  265.             var0.flush("period");
  266.          }
  267.  
  268.       }
  269.    }
  270.  
  271.    private void writeDataTypeInfo(SXE var1, String var2, BaseDeclaration var3, DataTypeIntf var4, boolean var5) {
  272.       if (var3 instanceof AttributeDeclaration) {
  273.          var1.writeElem("simpleType", -1);
  274.       } else {
  275.          var1.writeElem("simpleType");
  276.       }
  277.  
  278.       if (var2 != null && var2.length() > 0) {
  279.          var1.writeAttr("name", var3.getName());
  280.       }
  281.  
  282.       String var6 = BaseFlavor.getSourceCode(super.schema.getFlavorName(), var4.getBaseType());
  283.       var1.writeAttr("base", var6);
  284.       if (var5 && var3 instanceof DataTypeDeclaration) {
  285.          this.writeXSDComments(var1, var3.getComments());
  286.       }
  287.  
  288.       writeDataTypeFacets(var1, var3, var4);
  289.       var1.flush("simpleType");
  290.    }
  291.  
  292.    protected SchemaWriter.DeclWriterProxyIntf createProxy(ElementDeclaration var1) {
  293.       this.elemProxy.setDecl(var1);
  294.       return this.elemProxy;
  295.    }
  296.  
  297.    protected SchemaWriter.DeclWriterProxyIntf createProxy(AttributeDeclaration var1) {
  298.       this.attrProxy.setDecl(var1);
  299.       return this.attrProxy;
  300.    }
  301.  
  302.    protected SchemaWriter.DeclWriterProxyIntf createProxy(ParameterEntityDeclaration var1) {
  303.       if (var1 instanceof InternalPEDeclaration) {
  304.          this.ipeProxy.setDecl((InternalPEDeclaration)var1);
  305.          return this.ipeProxy;
  306.       } else {
  307.          return super.nopProxy;
  308.       }
  309.    }
  310.  
  311.    protected SchemaWriter.DeclWriterProxyIntf createProxy(NotationDeclaration var1) {
  312.       this.notationProxy.setDecl(var1);
  313.       return this.notationProxy;
  314.    }
  315.  
  316.    protected SchemaWriter.DeclWriterProxyIntf createProxy(DataTypeDeclaration var1) {
  317.       if (this.dtProxy == null) {
  318.          this.dtProxy = new DTProxy(this);
  319.       }
  320.  
  321.       this.dtProxy.setDecl(var1);
  322.       return this.dtProxy;
  323.    }
  324.  
  325.    protected void writeHeader(SXE var1) {
  326.       var1.writeComment("Generated by XML Authority. Conforms to w3c http://www.w3.org/1999/XMLSchema");
  327.       var1.writeElem("schema");
  328.       String var2 = null;
  329.       if (super.schema.getNamespace() != null) {
  330.          var2 = super.schema.getNamespace().toSource();
  331.       }
  332.  
  333.       if (var2 != null && var2.length() > 0) {
  334.          var1.writeAttr("targetNamespace", var2);
  335.          var1.writeLineBreak();
  336.       }
  337.  
  338.       var1.writeAttr("xmlns", "http://www.w3.org/1999/XMLSchema");
  339.       Enumeration var3 = super.schema.getDeclarations(super.schema.getURI(), Class.forName("com.extensibility.xml.NamespaceDeclaration"));
  340.       if (var3.hasMoreElements()) {
  341.          var1.writeLineBreak();
  342.       }
  343.  
  344.       while(var3.hasMoreElements()) {
  345.          NamespaceDeclaration var4 = (NamespaceDeclaration)var3.nextElement();
  346.          if (((BaseDeclaration)var4).getName() != null && var4.getNamespace() != null) {
  347.             String var5 = var4.getNamespace();
  348.             var1.writeAttr(String.valueOf("xmlns:").concat(String.valueOf(((BaseDeclaration)var4).getName())), var5);
  349.             if (var3.hasMoreElements()) {
  350.                var1.writeLineBreak();
  351.             }
  352.          }
  353.       }
  354.  
  355.    }
  356.  
  357.    protected void writeSchemaComments(SXE var1) {
  358.       this.writeXSDComments(var1, super.schema.getComments());
  359.    }
  360.  
  361.    protected void writeNamespaces(SXE var1, Enumeration var2) {
  362.       while(var2.hasMoreElements()) {
  363.          NamespaceDeclaration var3 = (NamespaceDeclaration)var2.nextElement();
  364.          URI var4 = var3.getSchemaLoc();
  365.          URI var5 = super.schema.getNamespace();
  366.          String var6 = var5 != null ? var5.toSource() : "";
  367.          String var7 = var3.getNamespace();
  368.          if (!var6.equals(new URI(var7))) {
  369.             var1.writeElem("import", -1);
  370.             var1.writeAttr("namespace", var7);
  371.             if (var4 != null && var4.toSource().length() > 0) {
  372.                var1.writeAttr("schemaLocation", var4.toSource());
  373.             }
  374.  
  375.             var1.flush("import");
  376.          }
  377.       }
  378.  
  379.    }
  380.  
  381.    protected void writeIncludes(SXE var1, Enumeration var2) {
  382.       while(var2.hasMoreElements()) {
  383.          ExternalSubset var3 = (ExternalSubset)var2.nextElement();
  384.          var1.writeElem("include", -1);
  385.          URI var4 = var3.getSystemURI();
  386.          var1.writeAttr("schemaLocation", var4.toSource());
  387.          var1.flush("include");
  388.       }
  389.  
  390.    }
  391.  
  392.    // $FF: synthetic method
  393.    static void access$2000371(XSDLWriter var0, SXE var1, String var2, BaseDeclaration var3, DataTypeIntf var4, boolean var5) {
  394.       var0.writeDataTypeInfo(var1, var2, var3, var4, var5);
  395.    }
  396.  
  397.    // $FF: synthetic method
  398.    static void access$2000071(XSDLWriter var0, SXE var1, Enumeration var2) {
  399.       var0.writeXSDComments(var1, var2);
  400.    }
  401.  
  402.    // $FF: synthetic method
  403.    static void access$2000171(XSDLWriter var0, SXE var1, BaseDeclaration var2, DataType var3) {
  404.       var0.writeDatatypeNameRef(var1, var2, var3);
  405.    }
  406.  
  407.    // $FF: synthetic method
  408.    static void access$2000271(XSDLWriter var0, SXE var1, String var2, String var3) {
  409.       var0.writeElemNameRef(var1, var2, var3);
  410.    }
  411. }
  412.